package main

type Mymap[KEY int | string, VALUE float32 | float64] map[KEY]VALUE

type Man struct {
}

type Woman struct {
}

type Company[T Man | Woman] struct {
	Name string
	CEO  T
}

type MyChannel[T int | string] chan T

// WowStuct 类型嵌套
type WowStuct[T string | int, S []T] struct {
	A T
	B S
}

// CommonType 错误用法1, 类型参数不能单独使用
//type CommonType[T string | int] T

// CommonType 错误用法2, 会被误解为 T × string
//type CommonType [T*string | int][]T

type CommonType[T interface{ *string } | int] []T

// go 1.20 匿名结构体 不支持 泛型
// 泛型不支持 switch 判断
// 匿名函数不支持泛型

func main() {
	//m := Mymap[int, float32]{}

	//company := Company[Man]{
	//	Name: "Mandelbrot",
	//	CEO:  Man{},
	//}

	//var c MyChannel[string]

	//d := WowStuct[string, []string]{
	//	A: "a",
	//    B: []string{"b", "c"},
	//}

	// 几种常见的错误
	//test := struct[T int| string] {
	//	Name string
	//	Age  int
	//}

	//fn := func[T int | float32](a, b int) {}
}
